Computer software applications typically consist of many modules, known as functions, which work together to perform desired tasks. A significant concern in software development is operational speed, which is largely dependent on the performance of the individual functions making up the application. Thus, an important component of application development is monitoring application performance.
To provide useful information, performance measurement should, to the extent possible, avoid interfering with the normal operation of the application. Because performance measurement involves collecting data in circumstances under which data would not ordinarily be collected, performance measurement necessarily affects the normal operation of the application to a certain extent. Certain factors contribute to this effect. For example, inserting data collection code in an application makes the application larger, which slows operation down somewhat. This decrease in performance is attributable to the increase in the amount of code that must be both loaded into the system's memory and executed. In addition, adding data collection code increases the amount of time other operations take due to the execution of the data collection code. As a result, the time relationships between the other activities within the application and within the system are affected. Data collection also affects application performance as a result of input/output (I/O) bandwidth considerations. Specifically, when data is collected, it must be stored, for example, in physical memory, on a disk, or on a networked device. Storing data consumes significant time due to the relatively slow process of outputting data to the storage device. This burden is especially considerable when large amounts of data are collected. While the burden can be reduced by adding a dedicated I/O device, such as a disk drive, device contention may still arise at the system level.